package com.easycoding.ums.system.entity;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.easycoding.ums.support.BaseEntity;
import com.easycoding.ums.enumcode.AccountStatus;
import com.easycoding.ums.enumcode.UserLevel;

/**
 * 用户表
 * @author Wangjk
 * @Version 1.0
 * @Date 2013-4-1
 */
@Entity
@Table(name="users")
public class User extends BaseEntity{

	/**
	 * 
	 */
	private static final long serialVersionUID = 7225523039076829698L;
	
	
	
	
	/**
	 * 节点树
	 */
	@Column
	private String idtree;
	
	/**
	 * 账号
	 */
	@Column(nullable = false ,unique = true)
	private String account;
	
	/**
	 * 中文名称
	 */
	@Column
	private String cname;
	
	/**
	 * 密码
	 */
	@Column
	private String password;
	
	/**
	 * 账户状态
	 */
	@Column(name = "account_status")
	private Integer accountStatus;
	
	/**
	 * 用户等级
	 */
	@Column(name = "user_level")
	private Integer  userLevel;
	
	/**
	 * 注册时间
	 */
	@Column(name = "reg_time")
	private Date regTime;
	
	/**
	 * 更新时间
	 */
	@Column(name = "upd_time")
	private Date updTime;
	
	/**
	 * 最后登录时间
	 */
	@Column(name = "last_login")
	private Date lastLogin;
	
	/**
	 * 是否子账号
	 */
	@Column(name = "is_child")
	private boolean isChild;
	
	/**
	 * 父节点编号
	 */
	@Column(name = "parent_id")
	private Long parentId;
	
	/**
	 * 登录次数
	 */
	@Column(name = "login_times")
	private Long loginTimes;
	
	/**
	 * 登录IP
	 */
	@Column(name="login_ip")
	private String loginIp;
	
	/**
	 * 用户角色
	 */
	@OneToMany(mappedBy="user",cascade={CascadeType.ALL},fetch=FetchType.EAGER)
	private Set<UserRole> userRoles = new HashSet<UserRole>();

	/**
	 * 获取节点数
	 * @return idtree 节点数
	 */
	public String getIdtree() {
		return idtree;
	}

	/**
	 * 设置节点数
	 * @param idtree 节点数
	 */
	public void setIdtree(String idtree) {
		this.idtree = idtree;
	}

	/**
	 * 获取账号
	 * @return account 账号
	 */
	public String getAccount() {
		return account;
	}

	/**
	 * 设置账号
	 * @param account 账号
	 */
	public void setAccount(String account) {
		this.account = account;
	}

	/**
	 * 获取中文名称
	 * @return cname 中文名称
	 */
	public String getCname() {
		return cname;
	}

	/**
	 * 设置中文名称
	 * @param cname 中文名称
	 */
	public void setCname(String cname) {
		this.cname = cname;
	}

	/**
	 * 获取密码
	 * @return password 密码
	 */
	public String getPassword() {
		return password;
	}

	/**
	 * 设置密码
	 * @param password 密码
	 */
	public void setPassword(String password) {
		this.password = password;
	}

	/**
	 * 获取账户状态
	 * @return accountStatus 账户状态
	 */
	public Integer getAccountStatus() {
		return accountStatus;
	}

	/**
	 * 设置账户状态
	 * @param accountStatus 账户状态
	 */
	public void setAccountStatus(Integer accountStatus) {
		this.accountStatus = accountStatus;
	}

	/**
	 * 获取用户等级
	 * @return userLevel 用户等级
	 */
	public Integer getUserLevel() {
		return userLevel;
	}

	/**
	 * 设置用户等级
	 * @param userLevel 用户等级
	 */
	public void setUserLevel(Integer userLevel) {
		this.userLevel = userLevel;
	}

	/**
	 * 获取注册时间
	 * @return regTime 注册时间
	 */
	public Date getRegTime() {
		return regTime;
	}

	/**
	 * 设置注册时间
	 * @param regTime 注册时间
	 */
	public void setRegTime(Date regTime) {
		this.regTime = regTime;
	}

	/**
	 * 获取最后登录时间
	 * @return lastLogin 最后登录时间
	 */
	public Date getLastLogin() {
		return lastLogin;
	}

	/**
	 * 设置最后登录时间
	 * @param lastLogin 最后登录时间
	 */
	public void setLastLogin(Date lastLogin) {
		this.lastLogin = lastLogin;
	}


	/**
	 * 获取是否子账号
	 * @return isChild 是否子账号
	 */
	public boolean isChild() {
		return isChild;
	}

	/**
	 * 设置是否子账号
	 * @param isChild 是否子账号
	 */
	public void setChild(boolean isChild) {
		this.isChild = isChild;
	}

	/**
	 * 获取父节点编号
	 * @return parentId 父节点编号
	 */
	public Long getParentId() {
		return parentId;
	}

	/**
	 * 设置父节点编号
	 * @param parentId 父节点编号
	 */
	public void setParentId(Long parentId) {
		this.parentId = parentId;
	}

	/**
	 * 获取登录IP
	 * @return loginIp 登录IP
	 */
	public String getLoginIp() {
		return loginIp;
	}

	/**
	 * 设置登录IP
	 * @param loginIp 登录IP
	 */
	public void setLoginIp(String loginIp) {
		this.loginIp = loginIp;
	}

	/**
	 * 获取用户角色
	 * @return userRoles 用户角色
	 */
	public Set<UserRole> getUserRoles() {
		return userRoles;
	}

	/**
	 * 设置用户角色
	 * @param userRoles 用户角色
	 */
	public void setUserRoles(Set<UserRole> userRoles) {
		this.userRoles = userRoles;
	}

	/**
	 * 获取登录次数
	 * @return loginTimes 登录次数
	 */
	public Long getLoginTimes() {
		return loginTimes;
	}

	/**
	 * 设置登录次数
	 * @param loginTimes 登录次数
	 */
	public void setLoginTimes(Long loginTimes) {
		this.loginTimes = loginTimes;
	}
	
	/**
	 * 获取更新时间
	 * @return updTime 更新时间
	 */
	public Date getUpdTime() {
		return updTime;
	}

	/**
	 * 设置更新时间
	 * @param updTime 更新时间
	 */
	public void setUpdTime(Date updTime) {
		this.updTime = updTime;
	}

	public String getLoginTime(){
		if(this.lastLogin != null){
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			return format.format(this.lastLogin);
		}
		return null;
	}
	
	public String getLoginDate(){
		if(this.lastLogin != null){
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			return format.format(this.lastLogin);
		}
		return null;
	}
	
	public String getRegDate(){
		if(this.regTime != null){
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
			return format.format(this.regTime);
		}
		return null;
	}
	
	/**
	 * 用户级别名称
	 * @return
	 */
	public String getUserLevelName(){
		if(this.getUserLevel() != null){
			return UserLevel.getName(this.getUserLevel());
		}
		return "";
	}
	
	/**
	 * 下级用户级别名称
	 * @return
	 */
	public String getSubUserLevelName(){
		if(this.getUserLevel() != null){
			return UserLevel.getName(this.getUserLevel()+1);
		}
		return "";
	}
	
	/**
	 * 上级用户级别名称
	 * @return
	 */
	public String getSupUserLevelName(){
		if(this.getUserLevel() != null){
			return UserLevel.getName(this.getUserLevel()-1);
		}
		return "";
	}
	
	/**
	 * 用户状态名称
	 * @return
	 */
	public String getAccountStatusName(){
		if(this.getAccountStatus() != null){
			return AccountStatus.getName(this.getAccountStatus());
		}
		return "";
	}

}
